Option Explicit

' ======================================================================
' Descriptor
' ISqlFormatterElem 格式化器的基础数据结构接口
' ======================================================================

' ==================================================
' 添加组成元素
' ==================================================
' 添加组成元素
Public Sub addComponent(ByRef c As ISqlFormatterElem)
End Sub

' 将元素添加到开头位置
Public Sub addComponentToFirst(ByRef c As ISqlFormatterElem)
End Sub

' 能否将元素添加到开头位置
Public Function canAddComponentToFirst() As Boolean
End Function

' ==================================================
' 对齐处理
' ==================================================
' 该方法是用来配置对齐的方法
' 返回元素内，最多一级深度下的对齐元素组
' 如果是列对象，则返回作用域各个组成元素内的条件组（主要是子查询）
' 如果是条件对象，则返回条件自身
' 如果是作用域对象，则返回作用域内各部分中的条件组合
' 如果是赋值语句，则返回语句自身
' 如果没有条件或者赋值语句，则返回 null
'
' @return IObjArrayRef<IObjArrayRef<ISqlFormatterAlignmentElem>>
Public Function getAlignmentElemGroups() As IObjArrayRef
End Function

' ==================================================
' 前缀空格设置
' ==================================================
' 设置当前元素的嵌套深度，并计算前缀空格的数量
' 会覆盖 setPrefixSpaceCount 的设置结果
Public Sub setElemNestCount(ByVal nestCount As Integer, ByRef config As SqlFormatterConfiguration)
End Sub

' 直接设置前缀空格的数量
' 将会覆盖 setElemNestCount 对前缀空格数量的控制
Public Sub setPrefixSpaceCount(ByVal spaceCount As Integer, ByRef config As SqlFormatterConfiguration)
End Sub

' ==================================================
' 边界括号
' ==================================================
' 是否存在边界括号，有左边或者右边都返回 true
Public Function hasBoundaryParenthesis() As Boolean
End Function

' 边界处的 [(] 的数量 + count 个
Public Sub addBoundaryLeftParenthesis(Optional ByVal count As Integer = 1)
End Sub

' 边界处的 [)] 的数量 + count 个
Public Sub addBoundaryRightParenthesis(Optional ByVal count As Integer = 1)
End Sub

' ==================================================
' 内容检查
' ==================================================
' 获取类型
Public Function getType() As SqlTokenType
End Function

' 检查当前元素是不是一个注释
Public Function isComment() As Boolean
End Function

' 检查当前元素是不是和前一个元素处于同一行的注释
Public Function isShareLineComment() As Boolean
End Function

' 检查当前元素是不是处于单独一行的注释
Public Function isSingleLineComment() As Boolean
End Function

' 检查当前元素是不是以注释结尾
Public Function isEndsWithComment() As Boolean
End Function

' 检查当前生成器是不是多行的
Public Function isMultiLine() As Boolean
End Function

' ==================================================
' 生成列的字符串
' ==================================================
' 生成一整行的字符串。如果本身是多行，将会使用换行符进行连接
Public Function toString(ByRef config As SqlFormatterConfiguration) As String
End Function

' 生成多行字符串
' 如果只有一行，则返回的数组引用中将会只有一个
' 并且不会在开头附加前缀空格
'
' @return IPrimitiveArrayRef<String>
Public Function toStringArray(ByRef config As SqlFormatterConfiguration) As IPrimitiveArrayRef
End Function